package com.erp.database.configuration.database;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

import com.erp.database.pos.service.MiddleTableService;


@Aspect
@Component
public class DataSourceAspect {

    /**
     * 使用空方法定义切点表达式
     * execution([方法修饰符] 方法返回值类型 [方法所属的类] 方法名(形参列表) [异常])
     * *通配符
     * ..0或多个任意类型参数
     */
    @Pointcut("execution(* com.erp.database.*.service.*.*(..))")
    public void declareJointPointExpression() {
    }

    @Before("declareJointPointExpression()")
    public void setDataSourceKey(JoinPoint point){
        //根据连接点所属的类实例，动态切换数据源
        if (point.getTarget() instanceof MiddleTableService) {
            DatabaseContextHolder.setDatabaseType(DatabaseType.ERP_CAIWU);
        } else {//连接点所属的类实例是（当然，这一步也可以不写，因为defaultTargertDataSource就是该类所用的mytestdb）
            DatabaseContextHolder.setDatabaseType(DatabaseType.ERP_POS);
        }
    }
}